// a.js
const obj1 = {}
obj1['a'] = 1
// b.js
// import obj from './a.js' //伪代码
obj1['a'] = 1 // b.js中把a.js中的obj1[a]属性覆盖了

// Symbol()的返回值是独一无二的
const s1 = Symbol()
const s2 = Symbol()

console.log(s1 == s2) // false
console.log(s1 === s2) // false

// 作为属性名
const obj3 = {
  [Symbol()]: 123,
}

console.log(obj3)

// 对象的私有成员
// c.js
//name是独一无二的,没导出的话,在外部模块是拿不到这个name的,也没办法创建一个一模一样的值
const name = Symbol()

const person = {
  [name]: '私有成员',
  say() {
    console.log(this[name])
  },
}

// d.js
person.say()
console.log(person.name) // 没办法读取到

// 重写对象的toString方法
const obj4 = {
  [Symbol.toStringTag]: 'XObject',
}

console.log(obj3.toString()) // 参考组
console.log(obj4.toString())
